# 这个是根据上位机发送控制命令的统一处理，尽量不要写具体的控制逻辑，只进行任务的调度和管理使用
from device_func import test_main, game_main
from utils import set_global_value, get_global_value, thread_run, async_run
from setGPIO import Mode


# 下面这个装饰器代表新启一个线程运行这个函数，因此每次handle都是多线程执行
# ！！！但是都通过status这个全局变量控制运行状态，防止同时运行多个任务
# 主要async声明的异步函数都需要用async_run包裹一下再运行
@thread_run
def handler (action, websocket):
  # 这是训练停止控制逻辑
  if action == 'cancel':
    set_global_value('status', False)
    async_run(websocket.send('complete'))
  # 这是训练开始控制逻辑，继电器为流量采集模式
  if action == 'train':
    if get_global_value('status'):
      async_run(websocket.send('working'))
    else:
      set_global_value('status', True)
      async_run(test_main(websocket, Mode['FLOW_READ']).send(None))
  # 这是训练开始控制逻辑，继电器为排痰移动模式
  if action == 'move':
    if get_global_value('status'):
      async_run(websocket.send('working'))
    else:
      set_global_value('status', True)
      async_run(test_main(websocket, Mode['PAITAN_YIDONG']).send(None))
  # 这是训练开始控制逻辑，继电器为排痰松动模式
  if action == 'loosen':
    if get_global_value('status'):
      async_run(websocket.send('working'))
    else:
      set_global_value('status', True)
      async_run(test_main(websocket, Mode['PAITAN_SONGDONG']).send(None))
  # 游戏开始逻辑
  if action == 'game':
    if get_global_value('status'):
      async_run(websocket.send('working'))
    else:
      set_global_value('status', True)
      # 游戏启动逻辑
      game_main(websocket)
    

  
